
//1234.替换子串得到平衡字符串
class Solution {
    public:
        int balancedString(string s) {
            //题目希望找到一个字符串，该字符串经过替换之后能够让字符串s称为平衡字符串、
            //若待替换子串意外存在出现此处大于m的就不能实现替换
            unordered_map<char ,int> mm;
            for(auto e:s) mm[e]++;
            int n=s.size(),aver=n/4;
            
            if(mm['Q']<=aver&&mm['W']<=aver&&mm['E']<=aver&&mm['R']<=aver) return 0;
            //进行滑动窗口
            int left=0,ret=INT_MAX;
            for(int right=0;right<n;right++)
            {
                mm[s[right]]--;  //入窗口
                while(mm['Q']<=aver&&mm['W']<=aver&&mm['E']<=aver&&mm['R']<=aver)
                {
                    ret=min(ret,right-left+1);  //更新答案
                    mm[s[left++]]++; //出窗口
                }
            }
            return ret;
        }
    };